home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Programming / AmigaTalk / examples / 8queen.st next >
Text File  |  1998-09-30  |  1KB  |  63 lines

  1. Class Queen
  2. |  myrow mycolumn neighbor boardsize |
  3. [
  4.    build:aQueen col:aNumber size:brdmax
  5.  
  6.     neighbor  <- aQueen.
  7.     mycolumn  <- aNumber.
  8.     myrow     <- 1.
  9.     boardsize <- brdmax.
  10.     neighbor first.
  11.     ^ self
  12. |
  13.    checkCol:colNumber row:rowNumber | cd |
  14.  
  15.     (rowNumber = myrow) ifTrue: [^false].
  16.     cd <- colNumber - mycolumn.
  17.  
  18.     ((myrow + cd) = rowNumber) ifTrue: [^ false].
  19.  
  20.     ((myrow - cd) = rowNumber) ifTrue: [^ false].
  21.  
  22.     (neighbor isNil) ifFalse:
  23.       [ ^ neighbor checkCol: colNumber row: rowNumber ].
  24.     ^ true
  25. |
  26.   first
  27.     myrow <- 1.
  28.     ^ self checkrow
  29. |
  30.   next
  31.     myrow <- myrow + 1.
  32.     ^ self checkrow
  33. |
  34.   checkrow
  35.     (neighbor isNil) ifTrue: [^ myrow].
  36.  
  37.     [myrow <= boardsize] whileTrue:
  38.        [(neighbor checkCol: mycolumn row: myrow)
  39.            ifTrue:  [^ myrow]
  40.            ifFalse: [myrow <- myrow + 1]
  41.        ].
  42.  
  43.        ((neighbor next) isNil) ifTrue: [^ nil].
  44.     ^ self first
  45. |
  46.   printboard
  47.     (neighbor isNil) ifFalse: [neighbor printboard].
  48.     ('Col ', mycolumn asString, ' Row ', myrow asString) print
  49. ]
  50.  
  51. Class Main
  52. | lastq |
  53. [
  54.   main | size |
  55.  
  56.    size  <- 8.
  57.    lastq <- nil.
  58.    (1 to: size) do: [:x | lastq <- Queen new build:
  59.                                    lastq col: x size: size].
  60.    lastq first.
  61.    lastq printboard
  62. ]
  63.